﻿var inputmodeflg = false;
$(document).ready(function() {
    jQuery.fn.extend({
        initialize:
		function() {
		    ////////////↓チェックする対象を配列で列挙↓/////////////
		    var element = $(this);
		    /////////////////////////////////////////////////////////
		    element.keyup(function(e) {
		        //		        if (e.keyCode >= 37 && e.keyCode <= 40) {
		        //		            return false;
		        //		        }
		        element.doCheck();
		    });

		    //↑自動変換していることをユーザに認識させるためにkeyupにしてチラ見せ

		    element.focus(function() {
		        element.focusAction();
		    });
		    element.blur(function() {
		        element.blurAction();
		    });
		},
        targets: "",
        flg: true,
        changeTable:
		[
			['あ', 'ア'], ['い', 'イ'], ['う', 'ウ'], ['え', 'エ'], ['お', 'オ'],
			['か', 'カ'], ['き', 'キ'], ['く', 'ク'], ['け', 'ケ'], ['こ', 'コ'],
			['さ', 'サ'], ['し', 'シ'], ['す', 'ス'], ['せ', 'セ'], ['そ', 'ソ'],
			['た', 'タ'], ['ち', 'チ'], ['つ', 'ツ'], ['て', 'テ'], ['と', 'ト'],
			['な', 'ナ'], ['に', 'ニ'], ['ぬ', 'ヌ'], ['ね', 'ネ'], ['の', 'ノ'],
			['は', 'ハ'], ['ひ', 'ヒ'], ['ふ', 'フ'], ['へ', 'ヘ'], ['ほ', 'ホ'],
			['ま', 'マ'], ['み', 'ミ'], ['む', 'ム'], ['め', 'メ'], ['も', 'モ'],
			['や', 'ヤ'], ['ゆ', 'ユ'], ['よ', 'ヨ'],
			['ら', 'ラ'], ['り', 'リ'], ['る', 'ル'], ['れ', 'レ', ], ['ろ', 'ロ'],
			['わ', 'ワ'], ['を', 'ヲ'], ['ん', 'ン'],
			['が', 'ガ'], ['ぎ', 'ギ'], ['ぐ', 'グ'], ['げ', 'ゲ'], ['ご', 'ゴ'],
			['ざ', 'ザ'], ['じ', 'ジ'], ['ず', 'ズ'], ['ぜ', 'ゼ'], ['ぞ', 'ゾ'],
			['だ', 'ダ'], ['ぢ', 'ヂ'], ['づ', 'ヅ'], ['で', 'デ'], ['ど', 'ド'],
			['ば', 'バ'], ['び', 'ビ'], ['ぶ', 'ブ'], ['べ', 'ベ'], ['ぼ', 'ボ'],
			['ぱ', 'パ'], ['ぴ', 'ピ'], ['ぷ', 'プ'], ['ぺ', 'ペ'], ['ぽ', 'ポ'],
			['ゃ', 'ャ'], ['ゅ', 'ュ'], ['ょ', 'ョ'],
			['ぁ', 'ァ'], ['ぃ', 'ィ'], ['ぅ', 'ゥ'], ['ぇ', 'ェ'], ['ぉ', 'ォ'],
			['っ', 'ッ']
		],

        focusAction:
		function() {
		    this.flg = true;

		},
        blurAction:
		function() {
		    this.flg = false;
		},
        doCheck:
		function() {
		    if (this.flg) {
		        var targetE = $(this);
		        var str = targetE.val();
		        var newStr = "";
		        var leng = str.length;
		        var hitFlg = false;
		        for (var i = 0; i < leng; i++) {
		            var c = str.charAt(i);
		            for (var j = 0; j < this.changeTable.length; j++) {
		                if (c == this.changeTable[j][0]) {
		                    //全角平仮名だったら変える
		                    c = this.changeTable[j][1];
		                    if (i == leng - 1) {
		                        hitFlg = true;
		                    }
		                } else if (c == this.changeTable[j][1]) {
		                    //全角片仮名だったら変える
		                    c = this.changeTable[j][1];
		                    if (i == leng - 1) {
		                        hitFlg = true;
		                    }
		                }
		            }
		            newStr += c;
		        }
		        if (hitFlg) {
		            inputmodeflg = true;
		            targetE.blur();
		            targetE.val(newStr);
		            targetE.focus();
		        }
		        targetE = str = newStr = leng = hitFlg = null;
		    }
		}
    })
});
function recallImeMode() {
    var str = "";
    $("[inputmode=katakana]").each(function() {
        var element = $(this);
        //element.addClass('disable_ime-mode');
        element.context.style.imeMode = 'disabled';
        element.focus(function() {
            element.context.style.imeMode = 'disabled';
        })
        element.attr('onkeypress', 'return NotInputSpecialKeys(this,event," -")');
        //element.initialize();
        element.keyup(function(e) {
            if (e.keyCode < 37 || e.keyCode > 40) {

                var elem = $(this);
                //                var length = 0;
                //                if (elem.val().length > str.length) {
                //                    length = elem.val().length;
                //                }
                //                else {
                //                    length = str.length;
                //                }
                //                var index = 0;
                //                for (index; index < length; index++) {
                //                    if (elem.val()[index] != str[index]) {
                //                        break;
                //                    }
                //                }
                //                var first = elem.val();
                //                if (elem.val().length > str.length) {
                //                    index += 1;
                //                }
                elem.val(getKatakana(elem.val()));
                //index = index + (elem.val().length - first.length);
                //                if (elem.context.setSelectionRange) {
                //                    elem.context.focus();
                //                    elem.context.setSelectionRange(index, index);
                //                }
                //                else if (elem.context.createTextRange) {
                //                    var range = elem.context.createTextRange();
                //                    range.collapse(true);
                //                    range.moveEnd('character', index);
                //                    range.moveStart('character', index);
                //                    range.select();
                //                }
            }
        });
    });
}
$(document).ready(function() {
    recallImeMode();
});
var jaTable =
[
			['あ', 'ア'], ['い', 'イ'], ['う', 'ウ'], ['え', 'エ'], ['お', 'オ'],
			['か', 'カ'], ['き', 'キ'], ['く', 'ク'], ['け', 'ケ'], ['こ', 'コ'],
			['さ', 'サ'], ['し', 'シ'], ['す', 'ス'], ['せ', 'セ'], ['そ', 'ソ'],
			['た', 'タ'], ['ち', 'チ'], ['つ', 'ツ'], ['て', 'テ'], ['と', 'ト'],
			['な', 'ナ'], ['に', 'ニ'], ['ぬ', 'ヌ'], ['ね', 'ネ'], ['の', 'ノ'],
			['は', 'ハ'], ['ひ', 'ヒ'], ['ふ', 'フ'], ['へ', 'ヘ'], ['ほ', 'ホ'],
			['ま', 'マ'], ['み', 'ミ'], ['む', 'ム'], ['め', 'メ'], ['も', 'モ'],
			['や', 'ヤ'], ['ゆ', 'ユ'], ['よ', 'ヨ'],
			['ら', 'ラ'], ['り', 'リ'], ['る', 'ル'], ['れ', 'レ', ], ['ろ', 'ロ'],
			['わ', 'ワ'], ['を', 'ヲ'], ['ん', 'ン'],
			['が', 'ガ'], ['ぎ', 'ギ'], ['ぐ', 'グ'], ['げ', 'ゲ'], ['ご', 'ゴ'],
			['ざ', 'ザ'], ['じ', 'ジ'], ['ず', 'ズ'], ['ぜ', 'ゼ'], ['ぞ', 'ゾ'],
			['だ', 'ダ'], ['ぢ', 'ヂ'], ['づ', 'ヅ'], ['で', 'デ'], ['ど', 'ド'],
			['ば', 'バ'], ['び', 'ビ'], ['ぶ', 'ブ'], ['べ', 'ベ'], ['ぼ', 'ボ'],
			['ぱ', 'パ'], ['ぴ', 'ピ'], ['ぷ', 'プ'], ['ぺ', 'ペ'], ['ぽ', 'ポ'],
			['ゃ', 'ャ'], ['ゅ', 'ュ'], ['ょ', 'ョ'],
			['ぁ', 'ァ'], ['ぃ', 'ィ'], ['ぅ', 'ゥ'], ['ぇ', 'ェ'], ['ぉ', 'ォ'],
			['っ', 'ッ']
		];
var kat = {
    1: { "a": "ア", "i": "イ", "u": "ウ", "e": "エ", "o": "オ", " ": "　", "-": "ー" },
    2: {
        "nn": "ン",
        "ka": "カ", "ki": "キ", "ku": "ク", "ke": "ケ", "ko": "コ",
        "ca": "カ", "ci": "キ", "cu": "ク", "ce": "ケ", "co": "コ",
        "sa": "サ", "si": "シ", "su": "ス", "se": "セ", "so": "ソ",
        "ta": "タ", "ti": "チ", "tu": "ツ", "te": "テ", "to": "ト",
        "na": "ナ", "ni": "ニ", "nu": "ヌ", "ne": "ネ", "no": "ノ",
        "ha": "ハ", "hi": "ヒ", "fu": "フ", "hu": "フ", "he": "ヘ", "ho": "ホ",
        "ma": "マ", "mi": "ミ", "mu": "ム", "me": "メ", "mo": "モ",
        "ya": "ヤ", "yi": "イ", "yu": "ユ", "ye": "イェ", "yo": "ヨ",
        "ra": "ラ", "ri": "リ", "ru": "ル", "re": "レ", "ro": "ロ",
        "wa": "ワ", "wi": "ウィ", "wu": "ウ", "we": "ウェ", "wo": "ヲ",
        "ga": "ガ", "gi": "ギ", "gu": "グ", "ge": "ゲ", "go": "ゴ",
        "za": "ザ", "zi": "ジ", "zu": "ズ", "ze": "ゼ", "zo": "ゾ",
        "da": "ダ", "di": "ヂ", "du": "ヅ", "de": "デ", "do": "ド",
        "ba": "バ", "bi": "ビ", "bu": "ブ", "be": "ベ", "bo": "ボ",
        "pa": "パ", "pi": "ピ", "pu": "プ", "pe": "ペ", "po": "ポ",
        "ja": "ジャ", "ju": "ジュ", "jo": "ジョ", "ji": "ジ", "je": "ジェ",
        "va": "ヴァ", "vi": "ヴィ", "vu": "ヴ", "ve": "ヴェ", "vo": "ヴォ",

        "la": "ァ", "li": "ィ", "lu": "ゥ", "le": "ェ", "lo": "ォ",
        "xa": "ァ", "xi": "ィ", "xu": "ゥ", "xe": "ェ", "xo": "ォ",
        "qa": "クァ", "qi": "クイ", "qu": "ク", "qe": "クェ", "qo": "クォ",
        "fa": "ファ", "fi": "フィ", "fe": "フェ", "fo": "フォ"
    },
    3: {
        "tsu": "ツ",
        "kya": "キャ", "kyu": "キュ", "kyo": "キョ", "kye": "キェ",
        "sha": "シャ", "shu": "シュ", "she": "シェ", "sho": "ショ", "shi": "シ",
        "sya": "シャ", "syu": "シュ", "sye": "シェ", "syo": "ショ", "syi": "シィ",
        "cha": "チャ", "chu": "チュ", "cho": "チョ", "chi": "チ", "che": "チェ",
        "cya": "チャ", "cyu": "チュ", "cyo": "チョ", "cyi": "チィ", "cyi": "チェ",
        "nya": "ビャ", "nyu": "ニュ", "nyo": "ニョ", "nye": "ニェ",
        "hya": "ヒャ", "hyu": "ヒュ", "hyo": "ヒョ", "hye": "ヒェ",
        "mya": "ミャ", "myu": "ミュ", "myo": "ミョ", "mye": "ミェ",
        "rya": "リャ", "ryu": "リュ", "ryo": "リョ", "rye": "リェ",
        "gya": "ギャ", "gyu": "ギュ", "gyo": "ギョ", "gye": "ギェ",
        "bya": "ビャ", "byu": "ビュ", "byo": "ビョ", "bye": "ビェ",
        "pya": "ピャ", "pyu": "ピュ", "pyo": "ピョ", "pye": "ピェ",

        "kka": "ッカ", "kki": "ッキ", "kku": "ック", "kke": "ッケ", "kko": "ッコ",
        "ssa": "ッサ", "ssi": "ッシ", "ssu": "ッス", "sse": "ッセ", "sso": "ッソ",
        "tta": "ッタ", "tti": "ッチ", "ttu": "ッツ", "tte": "ッテ", "tto": "ット",
        "nna": "ッナ", "nni": "ッニ", "nnu": "ッヌ", "nne": "ッネ", "nno": "ッノ",
        "hha": "ッハ", "hhi": "ッヒ", "ffu": "ッフ", "hhu": "ッフ", "hhe": "ッヘ", "hho": "ッホ",
        "mma": "ッマ", "mmi": "ッミ", "mmu": "ッム", "mme": "ッメ", "mmo": "ッモ",
        "yya": "ッヤ", "yyu": "ッユ", "yyo": "ッヨ",
        "rra": "ッラ", "rri": "ッリ", "rru": "ッル", "rre": "ッレ", "rro": "ッロ",
        "wwa": "ッワ", "wwo": "ッヲ",
        "gga": "ッガ", "ggi": "ッギ", "ggu": "ッグ", "gge": "ッゲ", "ggo": "ッゴ",
        "zza": "ッザ", "zzi": "ッジ", "zzu": "ッズ", "zze": "ッゼ", "zzo": "ッゾ",
        "dda": "ッダ", "ddi": "ッヂ", "ddu": "ッヅ", "dde": "ッデ", "ddo": "ッド",
        "bba": "ッバ", "bbi": "ッビ", "bbu": "ッブ", "bbe": "ッベ", "bbo": "ッボ",
        "ppa": "ッパ", "ppi": "ッピ", "ppu": "ップ", "ppe": "ッペ", "ppo": "ッポ",
        "jja": "ッジャ", "jju": "ッジュ", "jjo": "ッジョ", "jji": "ッジ", "jje": "ッジェ",
        "vva": "ッヴァ", "vvi": "ッヴィ", "vvu": "ッヴ", "vve": "ッヴェ", "vvo": "ッヴォ",
        "cca": "ッカ", "cci": "ッシ", "ccu": "ック", "cce": "ッセ", "cco": "ッコ",

        "lya": "ャ", "lyi": "ィ", "lyu": "ュ", "lye": "ェ", "lyo": "ョ",
        "xya": "ャ", "xyi": "ィ", "xyu": "ュ", "xye": "ェ", "xyo": "ョ",

        "lla": "ッァ", "lli": "ッィ", "llu": "ッゥ", "lle": "ッェ", "llo": "ッォ",
        "xxa": "ッァ", "xxi": "ッィ", "xxu": "ッゥ", "xxe": "ッェ", "xxo": "ッォ",
        "qqa": "ックァ", "qqi": "ックィ", "qqu": "ック", "qqe": "ックェ", "qqo": "ックォ",
        "ffa": "ッファ", "ffi": "ッフィ", "ffe": "ッフェ", "ffo": "ッフォ",
        
        "tsa": "ツァ", "tsi": "ツィ", "tsu": "ツ", "tse": "ツェ", "tso": "ツォ",
        "vya": "ヴャ", "vyi": "ヴィ", "vyu": "ヴュ", "vye": "ヴェ", "vyo": "ヴョ",
        "tya": "チャ", "tyi": "チィ", "tyu": "チュ", "tye": "チェ", "tyo": "チョ",
        "dya": "ヂャ", "dyi": "ヂィ", "dyu": "ヂュ", "dye": "ヂェ", "dyo": "ヂョ",
        "fya": "フャ", "fyi": "フィ", "fyu": "フュ", "fye": "フェ", "fyo": "フョ",
        "qya": "クャ", "qyi": "クィ", "qyu": "クュ", "qye": "クェ", "qyo": "クョ"
    },
    4: {
        "ttsu": "ッツ",
        "kkya": "ッキャ", "kkyu": "ッキュ", "kkyo": "ッキョ", "kkye": "ッキェ",
        "ssha": "ッシャ", "sshu": "ッシュ", "sshe": "ッシェ", "ssho": "ッショ", "sshi": "ッシ",
        "ssya": "ッシャ", "ssyu": "ッシュ", "ssye": "ッシェ", "ssyo": "ッショ", "ssyi": "ッシィ",
        "ccha": "ッチャ", "cchu": "ッチュ", "ccho": "ッチョ", "cchi": "ッチ", "cche": "ッチェ",
        "ccya": "ッチャ", "ccyu": "ッチュ", "ccyo": "ッチョ", "ccyi": "ッチィ", "ccyi": "ッチェ",
        "nnya": "ッビャ", "nnyu": "ッニュ", "nnyo": "ッニョ", "nnye": "ッニェ",
        "hhya": "ッヒャ", "hhyu": "ッヒュ", "hhyo": "ッヒョ", "hhye": "ッヒェ",
        "mmya": "ッミャ", "mmyu": "ッミュ", "mmyo": "ッミョ", "mmye": "ッミェ",
        "rrya": "ッリャ", "rryu": "ッリュ", "rryo": "ッリョ", "rrye": "ッリェ",
        "ggya": "ッギャ", "ggyu": "ッギュ", "ggyo": "ッギョ", "ggye": "ッギェ",
        "bbya": "ッビャ", "bbyu": "ッビュ", "bbyo": "ッビョ", "bbye": "ッビェ",
        "ppya": "ッピャ", "ppyu": "ッピュ", "ppyo": "ッピョ", "ppye": "ッピェ",

        "llya": "ッャ", "llyi": "ッィ", "llyu": "ッュ", "llye": "ッェ", "llyo": "ッョ",
        "ttsa": "ッツァ", "ttsi": "ッツィ", "ttsu": "ッツ", "ttse": "ッツェ", "ttso": "ッツォ",
        "vvya": "ッヴャ", "vvyi": "ッヴィ", "vvyu": "ッヴュ", "vvye": "ッヴェ", "vvyo": "ッヴョ",
        "ttya": "ッチャ", "ttyi": "ッチィ", "ttyu": "ッチュ", "ttye": "ッチェ", "ttyo": "ッチョ",
        "ddya": "ッヂャ", "ddyi": "ッヂィ", "ddyu": "ッヂュ", "ddye": "ッヂェ", "dyyo": "ッヂョ",
        "ffya": "ッフャ", "ffyi": "ッフィ", "ffyu": "ッフュ", "ffye": "ッフェ", "ffyo": "ッフョ",
        "qqya": "ックャ", "qqyi": "ックィ", "qqyu": "ックュ", "qqye": "ックェ", "qqyo": "ックョ"
    }
};
function getKatakana(val) {
    return getConversion(val, kat);
}
function getc(ind, val, arr) {
    var obj = arr[ind];
    return obj[val];
}
function getr(val, arr) {
    return arr[val];
}
function getConversion(val, arr) {
    var str1 = new Array();
    var str = new Array();
    var res = "";
    str1 = val.split("\n");
    for (var k = 0; k < str1.length; k++) {
        str = str1[k].split(" ");
        for (var i = 0; i < str.length; i++) {
            var tmpstr = str[i];
            for (var j = 0; j < tmpstr.length; j++) {
                var tmpch = "";
                //Checking 4 chars
                tmpch = getc(4, tmpstr.substring(j, j + 4).toLowerCase(), arr);
                // Checking 3 chars
                if (!tmpch) {
                    tmpch = getc(3, tmpstr.substring(j, j + 3).toLowerCase(), arr);
                }
                if (tmpch) {
                    j += 3;
                }
                else {
                    var ch1 = tmpstr.substring(j, j + 1).toLowerCase();
                    var ch2 = tmpstr.substring(j + 1, j + 3).toLowerCase();
                    if (getc(2, ch2, arr) && ch1 != 'n' && (ch1 == ch2.substring(0, 1))) {
                        tmpch = getc(2, ch2, arr);
                        res += getc(4, "tsu", arr);
                    }

                    if (tmpch) {
                        j += 2;
                    } else {
                        // Checking 1 chars
                        var ch = tmpstr.substring(j, j + 2).toLowerCase();
                        tmpch = getc(2, ch, arr);
                        if (tmpch) {
                            j++;
                        } else {
                            // Checking 1 char
                            tmpch = getc(1, tmpstr.substring(j, j + 1).toLowerCase(), arr);
                        }
                    }
                }
                
         
                if (tmpch) {
                    res += tmpch;
                } else {
                    res += tmpstr.substring(j, j + 1);
                }
            }
            if (i < str.length -1) {
                res += "　";
            }
        }
    }
    return res;
}
function isnKatakana(val) {
    for (var i = 0; i < val.length; i++) {
        var c = val.charAt(i);
        for (var j = 0; j < jaTable.length; j++) {
            if (c == jaTable[j][1]) {
                return false;
            }
        }
    }
    return true;
}
function isKatakana(val) {
    for (var i = 0; i < val.length; i++) {
        var c = val.charAt(i);
        var has = false;
        for (var j = 0; j < jaTable.length; j++) {
            if (c == jaTable[j][1]) {
                has = true;
            }
        }
        if (!has) {
            return false;
        }
    }
    return true;
}
var valStr = "";
function convertPhrase(clear) {
    var val = clear ? '' : document.getElementById('katakana').value;

    var katElem = document.getElementById("katakana");
    katElem.value = getKatakana(val);
    return false;
} 